#ifndef MYSELFWIDGET_H
#define MYSELFWIDGET_H

#include <QWidget>
#include <QPushButton>
#include "login.h"

namespace Ui {
class MyselfWidget;
}

////////////////////////////////// AttentionButton类 //////////////////////////////////
class AttentionButton : public QPushButton
{
    Q_OBJECT
public:
    explicit AttentionButton(QWidget* parent = nullptr);
    bool isAttention()const;
    void changeStatus(bool isAttentioned);
private:
    bool isAttentionStatus = false;    // 是否被关注
};



////////////////////////////////// MyselfWidget类 //////////////////////////////////
class MyselfWidget : public QWidget
{
    Q_OBJECT

public:
    explicit MyselfWidget(QWidget *parent = nullptr);
    ~MyselfWidget();

    // 初始化界面控件
    void initUI();

    // 获取自己的信息
    void getMyselfInfo();

    // 加载当前用户信息
    void loadMyself();

    // 加载其他用户信息
    void loadOtherUser(const QString& userId);

    // 获取其他用户信息
    void getOtherUserInfo(const QString& userId);

    // 点击"上传头像"按钮
    void onAvatarBtnClicked();

    // 点击"设置"按钮
    void onSettingBtnClicked();

    // 点击"上传视频"按钮
    void onUploadVideoBtn();

    // 退出按钮点击
    void onQuitBtnClicked();

private:
    // 绑定信号槽
    void connectSignalAndSlots();

    // 是否隐藏界⾯元素：临时⽤⼾ 和 其他⽤⼾显⽰内容不同
    void hideWidget(bool isHide);

    // 获取用户视频列表
    void getUserVideoList(const QString& userId, int pageIndex);

    // 清空界面视频数据
    void clearVideoList();

private slots:

    // 获取个⼈⽤⼾信息完成
    void getMyselfInfoDone();

    // 获取⽤⼾头像槽函数
    void getAvatarDone(const QString& fileId, const QByteArray& data);

    // 1. 上传图片文件-->服务器返回fileId
    void uploadAvatarDone1(const QString& fileId, QWidget* whichPage);

    // 2. 修改个人信息中的fileIdId
    void uploadAvatarDone2();

    // 获取用户视频列表成功
    void getUserVideoListDone(const QString& userId, const QString& whichPage);

    // 获取其他用户信息成功
    void getOtherUserInfoDone();

    // 获取下一页视频
    void onScrollAreaValueChanged(int value);

    // 删除视频
    void deleteVideo(const QString& videoId);

    // 删除视频完成
    void deleteVideoDone(const QString& videoId);
    // 关注按钮点击
    void onAttentionBtnClicked();
    // 关注用户成功
    void newAttentionDone();
    // 取消关注用户成功
    void delAttentionDone();
    // 点击用户昵称
    void onNicknameBtnClicked();

    // 退出登录成功
    void logoutDone();

    // 修改昵称成功
    void setNicknameDone(const QString& nickName);

signals:
    // 切换 "上传视频"界面
    void switchUploadVideoPage(int pageIndex, const QString& videoPath);

private:
    Ui::MyselfWidget *ui;
    QString userId;       // 记录当前页面显示的是哪个用户的数据，如果为空表示当前登录用户，否则表示其他用户信息
    Login* login = nullptr;
};

#endif // MYSELFWIDGET_H
